import { createRouter, createWebHistory } from 'vue-router'
import { ElMessage } from 'element-plus'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    // 根路由重定向到 /login
    {
      path: '/',
      redirect: '/login',
    },
    // 登录界面
    {
      path: '/login',
      name: 'login',
      component: () => import('../views/login/LoginView.vue'),
    },
    // 注册页面
    {
      path: '/register',
      name: 'register',
      component: () => import('../views/login/RegisterView.vue'),
    },
    // 修改密码页面
    {
      path: '/changepassword',
      name: 'changepassword',
      component: () => import('../views/login/ChangePasswordView.vue'),
    },
    // 三个身份的主页
    {
      path: '/main/traffic',
      name: 'traffic',
      component: () => import('../views/TrafficView.vue'),
      meta: { requiresAuth: true }, // 需要认证才能访问
    },
    {
      path: '/main/admin',
      name: 'admin',
      component: () => import('../views/AdminView.vue'),
      meta: { requiresAuth: true },
    },
    {
      path: '/main/common',
      name: 'common',
      component: () => import('../views/CommonView.vue'),
      meta: { requiresAuth: true },
    },

    // 404 路由
    {
      path: '/:pathMatch(.*)*',
      name: 'notFound',
      component: () => import('../views/NotFoundView.vue'),
    },
  ],
})

// 前置守卫
router.beforeEach((to, from, next) => {
  // 判断目标路由是否需要认证
  if (to.meta.requiresAuth) {
    // 获取本地存储的 JWT
    const token = localStorage.getItem('token')
    // 检查 Token 是否存在且有效
    if (token) {
      try {
        // JWT 使用 Base64Url 编码（替换 + 为 -，/ 为 _，省略填充符 =）,atob 无法直接解码 Base64Url，需先修复字符
        const base64Url = token.split('.')[1]
        const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
        const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4)

        // 解析 Token（不验证签名，仅检查过期时间）
        const payload = JSON.parse(atob(padded))
        const expiresAt = payload.exp * 1000 // 转换为毫秒

        // 检查是否过期
        if (Date.now() < expiresAt) {
          next() // Token 有效，放行
        } else {
          // Token 已过期，清除并跳转登录
          localStorage.removeItem('token')
          localStorage.removeItem('userId')
          ElMessage.warning('登录已过期，请重新登录')
          next('/login')
        }
      } catch {
        // 解析失败（如 Token 格式错误）
        localStorage.removeItem('token')
        localStorage.removeItem('userId')
        ElMessage.warning('无效的 Token')
        next('/login')
      }
    } else {
      ElMessage.warning('请先登录')
      next('/login')
    }
  } else {
    next()
  }
})

export default router
